package model

import (
	"github.com/pkg/errors"
	"gorm.io/gorm"
)

type (
	GateCardMode struct {
		db *gorm.DB
	}
	GateCard struct {
		Model
		CardCode  string       `gorm:"default:'';type:varchar(64);index" json:"card_code"`
		GType     int          `gorm:"default:1" json:"g_type"` // 卡类型,1-普通卡,2-胁迫卡  *必填项
		StartTime JsonNullTime `gorm:"" json:"start_time"`      // 开始时间
		EndTime   JsonNullTime `gorm:"" json:"end_time"`        // 结束时间
	}
)

func NewGateCard(db *gorm.DB) *GateCardMode {
	return &GateCardMode{
		db: db,
	}
}

func (m *GateCardMode) Create(data *GateCard) error {
	return m.db.Create(data).Error
}

func (m *GateCardMode) Delete(id []int64) error {
	return m.db.Where("id in ?", id).Delete(&GateCard{}).Error
}

func (m *GateCardMode) FindByIds(ids []int64) ([]GateCard, error) {
	var list []GateCard
	err := m.db.Model(&GateCard{}).Where("id in ?", ids).Find(&list).Order("id desc").Limit(100).Error
	if errors.Is(gorm.ErrRecordNotFound, err) {
		return []GateCard{}, nil
	}
	//todo 切断list，防止内存逃逸，但是有一定的代价
	return append([]GateCard{}, list...), err
}

func (m *GateCardMode) FindCardByCode(code string) ([]GateCard, error) {
	var list []GateCard
	err := m.db.Model(&GateCard{}).Where("card_code = ?", code).Find(&list).Order("id desc").Limit(100).Error
	return append([]GateCard{}, list...), err
}
